package io.github.weiranyi.listener;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.listener.adapter.AbstractAdaptableMessageListener;

// 引入Qos限流后，需要对监听器进行改造 （implements MessageListener不用啦，用AbstractAdaptableMessageListener）
public class TopicListener extends AbstractAdaptableMessageListener {
    @Override
    public void onMessage(Message message, Channel channel) throws Exception {
        System.out.println("msgTopicListener："+new String(message.getBody()));
        /* Qos：basicAck 手动确认消息（参数1，参数2）
         *  参数1: MQ向信道投递消息的标识ID[单调递增的正整数]；
         *  参数2：true 为了减少网络流量true可以一次处理多条消息，一次可处理小于等于msgId的所有消息；
         *         flase 只确认当前标识对应的消息
         * */
        long msgId = message.getMessageProperties().getDeliveryTag();
        channel.basicAck(msgId,true);

        Thread.sleep(3000);
        System.out.println("休息3s后继续处理消息");
    }













}